home *** CD-ROM | disk | FTP | other *** search
- /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
- /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
- /* */
- /* PLOT EN HAUTE RESOLUTION */
- /* */
- /* copyright Babe Cool */
- /* */
- /* */
- /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
- /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
-
- # include "genpari.h"
-
- #include <suntool/sunview.h>
- #include <suntool/canvas.h>
- #include <suntool/textsw.h>
- #include <suntool/panel.h>
-
- GEN ploth(ep,a,b,ch)
- entree *ep;
- GEN a,b;
- char *ch;
-
- #define ISCR 1120 /* 1400 en haute resolution */
- #define JSCR 800 /* 1120 en haute resolution */
- #define DECI 100 /* 140 en haute resolution */
- #define DECJ 50 /* 70 en haute resolution */
-
- {
- long av,av2,jz,j,j1,i,sig,is,is2,js,js2;
- GEN p1,p2,ysml,ybig,x,diff,dyj,dx,y[ISCR+1];
- char c1[20];
- char *c2;
- Frame ecran;
- Canvas canevas;
- Pixwin *pw;
- Pixfont *font;
-
- ecran=window_create(NULL,FRAME,FRAME_LABEL,"ploth",
- WIN_ERROR_MSG,"you must be in suntools",0);
- canevas=window_create(ecran,CANVAS,WIN_HEIGHT,JSCR,
- WIN_WIDTH,ISCR,0);
- window_fit(ecran);pw=canvas_pixwin(canevas);
- is=ISCR-DECI;js=JSCR-DECJ;is2=is-DECI;js2=js-DECJ;
- pw_vector(pw,DECI,DECJ,DECI,js,PIX_SRC,1);
- pw_vector(pw,DECI,DECJ,is,DECJ,PIX_SRC,1);
- pw_vector(pw,is,DECJ,is,js,PIX_SRC,1);
- pw_vector(pw,DECI,js,is,js,PIX_SRC,1);
-
- sig=gcmp(b,a); if(!sig) return gnil;
- av=avma;
- if(sig<0) {x=a;a=b;b=x;}
- for(i=1;i<=is2;i++) y[i]=cgetr(3);
- newvalue(ep,cgetr(3)); x=(GEN)ep->value; gaffect(a,x);
- dx=gdivgs(gsub(b,a),is2-1);ysml=gzero;ybig=gzero;
- av2=avma;
- for(i=1;i<=is2;i++)
- {
- gaffect(lisexpr(ch),y[i]);
- if(gcmp(y[i],ysml)<0) ysml=y[i];
- if(gcmp(y[i],ybig)>0) ybig=y[i];
- gaddz(x,dx,x);avma=av2;
- }
- diff=gsub(ybig,ysml);
- if(gcmp0(diff)) {ybig=gaddsg(1,ybig);diff=gun;}
- dyj=gdivsg(js2-1,diff);jz=js+itos(ground(gmul(ysml,dyj)));
- pw_vector(pw,DECI,jz,is,jz,PIX_SRC,1);
- if(gsigne(a)*gsigne(b)<0)
- {
- jz=1-itos(ground(gdiv(a,dx)))+DECI;
- pw_vector(pw,jz,DECJ,jz,js,PIX_SRC,1);
- }
- av2=avma;
- for(i=1;i<=is2;i++)
- {
- j1=js-itos(ground(gmul(gsub(y[i],ysml),dyj)));
- if(i==1) j=j1;
- else
- {
- pw_vector(pw,i-2+DECI,j,i-1+DECI,j1,PIX_SRC,1);j=j1;
- }
- avma=av2;
- }
- font=pw_pfsysopen();
- p1=cgetr(4);gaffect(ysml,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
- for(i=1;c2[i];i++) pw_char(pw,-4+9*i,js,PIX_SRC,font,c2[i]);
- gaffect(ybig,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
- for(i=1;c2[i];i++) pw_char(pw,-4+9*i,DECJ,PIX_SRC,font,c2[i]);
- gaffect(a,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
- for(i=1;c2[i];i++) pw_char(pw,DECI-45+9*i,js+20,PIX_SRC,font,c2[i]);
- gaffect(b,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
- for(i=1;c2[i];i++) pw_char(pw,is-45+9*i,js+20,PIX_SRC,font,c2[i]);
- avma = av;
- window_main_loop(ecran);
- killvalue(ep);
- return gnil;
- }
- GEN ploth2(ep,a,b,ch)
- entree *ep;
- GEN a,b;
- char *ch;
-
- #define ISCR 1120 /* 1400 en haute resolution */
- #define JSCR 800 /* 1120 en haute resolution */
- #define DECI 100 /* 140 en haute resolution */
- #define DECJ 50 /* 70 en haute resolution */
-
- {
- long av,av2,jz,iz,k1,k,j,j1,i,sig,is,is2,js,js2;
- GEN p1,p2,ysml,ybig,xsml,xbig,diffx,diffy,dxj,t,dyj,dt,y[ISCR+1],x[ISCR+1];
- char c1[20];
- char *c2;
- Frame ecran;
- Canvas canevas;
- Pixwin *pw;
- Pixfont *font;
-
- ecran=window_create(NULL,FRAME,FRAME_LABEL,"ploth",
- WIN_ERROR_MSG,"you must be in suntools",0);
- canevas=window_create(ecran,CANVAS,WIN_HEIGHT,JSCR,
- WIN_WIDTH,ISCR,0);
- window_fit(ecran);pw=canvas_pixwin(canevas);
- is=ISCR-DECI;js=JSCR-DECJ;is2=is-DECI;js2=js-DECJ;
- pw_vector(pw,DECI,DECJ,DECI,js,PIX_SRC,1);
- pw_vector(pw,DECI,DECJ,is,DECJ,PIX_SRC,1);
- pw_vector(pw,is,DECJ,is,js,PIX_SRC,1);
- pw_vector(pw,DECI,js,is,js,PIX_SRC,1);
-
- sig=gcmp(b,a); if(!sig) return gnil;
- av=avma;
- if(sig<0) {p1=a;a=b;b=p1;}
- for(i=1;i<=is2;i++) {x[i]=cgetr(3);y[i]=cgetr(3);}
- newvalue(ep,cgetr(3)); t=(GEN)ep->value; gaffect(a,t);
- dt=gdivgs(gsub(b,a),is2-1);ysml=ybig=xsml=xbig=gzero;
- av2=avma;
- for(i=1;i<=is2;i++)
- {
- p1=lisexpr(ch);gaffect(p1[1],x[i]);gaffect(p1[2],y[i]);
- if(gcmp(y[i],ysml)<0) ysml=y[i];
- if(gcmp(y[i],ybig)>0) ybig=y[i];
- if(gcmp(x[i],xsml)<0) xsml=x[i];
- if(gcmp(x[i],xbig)>0) xbig=x[i];
- gaddz(t,dt,t);avma=av2;
- }
- diffy=gsub(ybig,ysml);
- if(gcmp0(diffy)) {ybig=gaddsg(1,ybig);diffy=gun;}
- diffx=gsub(xbig,xsml);
- if(gcmp0(diffx)) {xbig=gaddsg(1,xbig);diffx=gun;}
- dyj=gdivsg(js2-1,diffy);jz=js+itos(ground(gmul(ysml,dyj)));
- dxj=gdivsg(is2-1,diffx);iz=DECI-itos(ground(gmul(xsml,dxj)));
- if(gsigne(ysml)*gsigne(ybig)<0)
- pw_vector(pw,DECI,jz,is,jz,PIX_SRC,1);
- if(gsigne(xsml)*gsigne(xbig)<0)
- pw_vector(pw,iz,DECJ,iz,js,PIX_SRC,1);
- av2=avma;
- for(i=1;i<=is2;i++)
- {
- j1=js-itos(ground(gmul(gsub(y[i],ysml),dyj)));
- k1=DECI+itos(ground(gmul(gsub(x[i],xsml),dxj)));
- if(i==1) {j=j1;k=k1;}
- else
- {
- pw_vector(pw,k,j,k1,j1,PIX_SRC,1);j=j1;k=k1;
- }
- avma=av2;
- }
- font=pw_pfsysopen();
- p1=cgetr(4);gaffect(ysml,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
- for(i=1;c2[i];i++) pw_char(pw,-4+9*i,js,PIX_SRC,font,c2[i]);
- gaffect(ybig,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
- for(i=1;c2[i];i++) pw_char(pw,-4+9*i,DECJ,PIX_SRC,font,c2[i]);
- gaffect(xsml,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
- for(i=1;c2[i];i++) pw_char(pw,DECI-45+9*i,js+20,PIX_SRC,font,c2[i]);
- gaffect(xbig,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
- for(i=1;c2[i];i++) pw_char(pw,is-45+9*i,js+20,PIX_SRC,font,c2[i]);
- avma = av;
- window_main_loop(ecran);
- killvalue(ep);
- return gnil;
- }
-